import sys
sys.path.append("../")
import glob
from Linearity import Neuron
import numpy as np
import scipy.stats as ss
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.font_manager import findfont, FontProperties
# print(plt.style.available)
plt.style.use('seaborn-white')
matplotlib.rcParams['font.family']
print(findfont(FontProperties(family=['sans-serif'])))
#Colorscheme for squares
color_sqr = matplotlib.cm.viridis(np.linspace(0,1,9))
voltageClampFiles = '/media/sahil/NCBS_Shares_BGStim/patch_data/voltage_clamp_files.txt'
with open (voltageClampFiles,'r') as r:
dirnames = r.read().splitlines()
#Colorscheme for cells
color_cell = matplotlib.cm.plasma(np.linspace(0,1,len(dirnames)))
feature = 0
scalingFactor = 1e9
neurons = []
for dirname in dirnames:
cellIndex = dirname.split('/')[-1]
filename = dirname + '/plots/' + cellIndex + '.pkl'
neurons.append(Neuron.load(filename))
f, ax = plt.subplots(1,3)
r_squared = []
slopes = []
for index, n in enumerate(neurons):
# if index != (len(neurons) - 1) and index != (len(neurons) - 3) :
obs_exc, obs_inh = {}, {}
sqrs = []
for expt in n:
for sqr in expt:
if (expt[sqr].type == 1):
sqrs.append(sqr)
for coord in expt[sqr].coordwise:
obs_exc[coord] = expt[sqr].coordwise[coord].average_feature[5]
elif (expt[sqr].type == 2):
for coord in expt[sqr].coordwise:
obs_inh[coord] = expt[sqr].coordwise[coord].average_feature[0]
exc, inh = [], []
for coord in set(obs_exc).intersection(set(obs_inh)):
exc.append(-obs_exc[coord]*scalingFactor)
inh.append(obs_inh[coord]*scalingFactor)
ax[0].scatter(-obs_exc[coord]*scalingFactor, obs_inh[coord]*scalingFactor, c=color_cell[index], s=10)
slope, intercept, rval, pval, stderr = ss.linregress(exc, inh)
r_squared.append(rval**2)
slopes.append(slope)
excRange = np.linspace(min(exc), max(exc), 100)
inhFit = excRange*slope + intercept
ax[0].plot(excRange, inhFit, c=color_cell[index])
# xlim_old = ax[0].get_xlim()
# ylim_old = ax[0].get_ylim()
# minlim, maxlim = min(xlim_old[0], ylim_old[0]), max(xlim_old[1], ylim_old[1])
# ax[0].set_xlim(minlim,maxlim)
# ax[0].set_ylim(minlim,maxlim)
ax[0].set_title("Linear regression showing proportional E and I")
f.set_figheight(5)
f.set_figwidth(15)
#plt.legend(scatterPoints=sqrs, label=sqrs)
ax[1].hist(r_squared)
ax[1].set_title("$r^2$ for linear regression")
ax[2].hist(slopes)
ax[2].set_title("Different proportionality $P$ for E and I")
plt.show()
np.mean(r_squared), np.std(r_squared)
A. shows tight balance between tight balance between excitation and inhibition at the CA1 neuron.
B. shows r-square for linear regression showing high degree of correlation between E and I.
C. showing different proportionality P of all CA1 neurons.